package com.xhj.mybatis.reflection.invoker;

import java.lang.reflect.InvocationTargetException;

/**
 * Invoker
 *
 * @author XJks
 * @description 调用器接口。TODO:调用器：把“调用”抽象成统一接口。通过定义Object invoke(Object target, Object[] args)方法规范，对“读/写/任意方法调用”做统一抽象。
 */
public interface Invoker {
    /**
     * 声明一个方法 invoke，用于调用目标对象的方法
     *
     * @param target 表示要调用方法的对象
     * @param args   参数 args 表示调用方法时传递的参数数组
     * @return 方法调用的结果
     * @throws IllegalAccessException    非法访问异常
     * @throws InvocationTargetException 调用目标异常
     */
    Object invoke(Object target, Object[] args) throws IllegalAccessException, InvocationTargetException;

    /**
     * 声明一个方法 getType，用于获取该调用器所操作的类型（Class 对象）
     *
     * @return Class<?> 表示该调用器所操作的类型
     */
    Class<?> getType();
}
